spring boot 连接rabbitMQ 失败汇总与解决 您所在的位置:网站首页 actually of spring boot 连接rabbitMQ 失败汇总与解决

spring boot 连接rabbitMQ 失败汇总与解决

2023-04-19 12:19| 来源: 网络整理| 查看: 265

花了两天的时间来解决这个BUG,汇总了网上大多数的解决办法与结果,

很重要的前提:首先查看服务器对应的端口是否开放,如15672和5672,是否添加入站规则

问题描述:采用guest可以连接访问rabbitmq,使用其他账户连接rabbitmq失败(其他账户均已经分配虚拟机和权限,并且可以登录管理页面,说明账号密码没有错误)

报错截图如下

2021-05-13 09:11:28.605 INFO 39320 --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [118.192.69.111:5672] 2021-05-13 09:11:28.880 INFO 39320 --- [ main] o.s.a.r.l.SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. 2021-05-13 09:11:28.880 ERROR 39320 --- [192.69.111:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured java.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:121) ~[na:1.8.0_11] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_11] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_11] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_11] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:665) ~[amqp-client-5.10.0.jar:5.10.0] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11] 2021-05-13 09:11:28.880 INFO 39320 --- [ntContainer#0-1] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [118.192.69.111:5672] 2021-05-13 09:11:29.134 ERROR 39320 --- [192.69.111:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:121) ~[na:1.8.0_11] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_11] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_11] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_11] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:665) ~[amqp-client-5.10.0.jar:5.10.0] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11] 2021-05-13 09:11:29.134 ERROR 39320 --- [ntContainer#0-1] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s). org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:64) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:602) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:724) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:216) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2132) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2105) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2085) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueInfo(RabbitAdmin.java:407) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:391) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.attemptDeclarations(AbstractMessageListenerContainer.java:1890) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1871) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1346) [spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1192) [spring-rabbit-2.3.6.jar:2.3.6] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11] Caused by: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:385) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1139) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1087) ~[amqp-client-5.10.0.jar:5.10.0] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connectAddresses(AbstractConnectionFactory.java:638) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connect(AbstractConnectionFactory.java:613) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:565) ~[spring-rabbit-2.3.6.jar:2.3.6] ... 12 common frames omitted

好了,开始面向百度解决:第一种说法:有的说是spring.rabbitmq.connection-timeout 设置过小,导致连接超时,未建立连接解决办法是把改参数的值该大一点直接把它设置为0,0表示永远等待,即连接永不超时。

报错依旧!!!

第二种说法:

说spring boot配置文件的virtual-host和rabbitMQ上的不一致

重新给admin账号创建一个名为myHost的virtual-host,并在spring boot的配置文件中进行添加,如图

spring boot 配置文件

rabbitmq管理页面

报错依旧!!!

第三种说法:

当前使用的版本和spring boot 版本不匹配,把pom中对rabbitmq依赖的版本改成和spring boot 对应的版本,比如说我安装的rabbitmq是3.6.15版本,查了下是17年左右发布的,当时springboot还是1.5.x版本,然后把依赖换成1.5.10release版本

如图:

spring boot 版本

目前我使用的spring boot 版本是2.4.4,目前最新的也就到就2.4.5而已,而我使用的rabbit也是3.8.14,离最新的3.8.16版本相隔时间也不到一个月的时间,而且在本地是可以完全使用的,只不过连接远程服务不得而已,所以版本的问题完全可以排除。

image.png

rabbitmq版本

问题依旧!!!

第四种说法:

将连接端口进行修改,即将5672修改成其他端口,如5673

spring boot rabbitMQ连接端口修改

问题依旧!!!

其实没有必要在配置文件中在另外添加端口监听,因为在配置文件中有这么一句

By default, RabbitMQ will listen on all interfaces, using the standard (reserved) AMQP port.

最终解决:最后看到一篇博客,才找到了原因,他是通过命令的方式添加用户分配虚拟机和权限

rabbitmqctl add_user username passwd //添加用户,后面两个参数分别是用户名和密码 rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加权限 rabbitmqctl set_user_tags username administrator //修改用户角色,将用户设为管理员

我抱着不可能的心态直接Ctrl+C Ctrl+V ,结果居然成功的连接上了经过排查,是原来我设置密码的时候,都是用了数字,后面修改就得了真是蛋疼的操作!!!!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有